package Homework;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Scanner;

//电商系统
public class ElcBusinessSys {
//总的方法
	@SuppressWarnings("resource")
	public void start() {
		Member memberLogin = null;
		Log log=null;
		Scanner scanner = new Scanner(System.in);
		while(true) {
			System.out.println("欢迎登录电商系统！");
			System.out.println("1.会员登录\n2.电商购物\n3.会员注册\n4.浏览历史\n5.退出系统");
			System.out.print("请选择：");
			int choice =scanner.nextInt();
			switch(choice) {
			case 1:
				System.out.println("您选择了会员登录！");
				/*
				 * 登录前，先看用户是否已注册
				 * 未注册的则提示用户注册
				 * 已注册的则提示用户输入登录信息
				 */
				//创建一个文件，里面存放已注册的用户信息
				File fileLogin = new File("reg.txt");
				//判断该文件是否存在
				if(fileLogin.exists()) {
					//反序列化该文件，输出会员信息
					ObjectInputStream ois=null;
					try {
						ois = new ObjectInputStream(new FileInputStream(fileLogin));
						memberLogin=(Member) ois.readObject();
						System.out.print("请输入用户名：");
						String name=scanner.next();
						System.out.print("请输入密码：");
						String password=scanner.next();
						if(name.equals(memberLogin.getName()) && password.equals(memberLogin.getPassword())) {
							System.out.println("登录成功，祝您购物愉快^_^！");
							//创建用户的登录时间对象
							log = new Log();
							log.setName(name);
							String startTime = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(new Date(System.currentTimeMillis()));
							log.setStartTime(startTime);
						}else {
							System.out.println("用户名或密码错误，请重新输入！");
						}
					} catch (IOException e) {
						e.printStackTrace();
					} catch (ClassNotFoundException e) {
						e.printStackTrace();
					}finally {
						try {
							ois.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}else {
					//如果不存在提示用户去登录
					System.out.println("您还不是会员，请先注册再登录！");
				}
				continue;
			case 2:
				System.out.println("您选择了电商购物！");//默认已注册的用户进行购物
				/*
				 * 判断用户是否已购物
				 * 如果已经购物，则显示订单
				 * 如果未购物则提示用户进行购物
				 */
				//创建一个order文件存放用户的订单信息
				File orderFile = new File("order.txt");
				//判断该文件是否存在
				if (orderFile.exists()) {
					System.out.println("订单已存在！");
					//订单已存在，则反序列化对象，读取订单信息
					ObjectInputStream oisOrder =null;
					try {
						oisOrder = new ObjectInputStream(new FileInputStream(orderFile));
						//将订单信息放在一个hashMap中，键是member，值是order
						HashMap<Member, Order> hashMap=(HashMap<Member, Order>) oisOrder.readObject();
						System.out.println(hashMap);
						
					} catch (IOException e) {
						e.printStackTrace();
					} catch (ClassNotFoundException e) {
						e.printStackTrace();
					}finally {
						try {
							oisOrder.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}else {
					System.out.print("请输入您要购买的商品名：");
					String name=scanner.next();
					System.out.print("请输入您要购买的数量：");
					int count=scanner.nextInt();
					//创建一个新的订单，将用户输入的信息传入
					Order order = new Order(name, count, 10*count);
					//创建hashMap集合，键是Member，值是order
					HashMap<Member,Order> map = new HashMap<>();
					//将登陆的用户和订单一一对应
					map.put(memberLogin, order);
					//对象序列化，将订单存到orderFile中
					ObjectOutputStream oosOrder=null;
					try {
						oosOrder = new ObjectOutputStream(new FileOutputStream(orderFile));
						oosOrder.writeObject(map);
						oosOrder.flush();
					} catch (IOException e) {
						e.printStackTrace();
					}finally {
						try {
							oosOrder.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
					System.out.println(order.toString());
				}
				continue;
			case 3:
				System.out.println("您选择了会员注册！");
				/*
				 * 只考虑一个会员的情况
				 * 创建一个会员注册文件
				 * 如果该文件存在说明已注册，无需再注册
				 * 如果不存在，则可以注册
				 */
				File fileRge = new File("reg.txt");
				if(!fileRge.exists()) {
					System.out.print("请输入用户名：");
					String name=scanner.next();
					System.out.print("请输入密码：");
					String password=scanner.next();
					//创建一个对象
					Member memberReg = new Member(name, password);
					//对象序列化，将注册的会员输入到reg.txt文件
					ObjectOutputStream oos=null;
					try {
						oos = new ObjectOutputStream(new FileOutputStream(fileRge));
						oos.writeObject(memberReg);
						oos.flush();
						System.out.println("会员注册成功！");
					} catch (IOException e) {
						e.printStackTrace();
					}finally {
						try {
							oos.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}else {
					System.out.println("会员已存在，请前往登录！");
				}
				continue;
			case 4:
				System.out.println("您选择了浏览历史！");
				//先判断历史文件是否存在
				//创建一个文件夹存放用户浏览信息
				File fileHistory = new File("C:/log/bdqn/history.txt");
				if(fileHistory.exists()) {
					//文件存在，读取文件中的信息并输出
					BufferedReader br=null;
					try {
						br = new BufferedReader(new FileReader(fileHistory));
						String line=null;
						while((line=br.readLine())!=null) {
							System.out.println(line);
						}
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}finally {
						try {
							br.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}else {
					//文件不存在
					System.out.println("暂无浏览历史!");
				}
				continue;
			case 5:
				System.out.println("您选择了退出系统！");
				System.out.println("欢迎您下次光临！");
				//记录用户退出登录的时间
				String endTime=new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(new Date(System.currentTimeMillis()));
				log.setEndTime(endTime);
				//创建时间日志，将起存入C:/log/bdqn/history.txt文件中
				File fileLog = new File("C:/log/bdqn");
				if(!fileLog.exists()) {
					boolean mkdirs=fileLog.mkdirs();//创建多层文件夹
					if(mkdirs) {
						System.out.println("文件创建成功！");
					}else {
						System.out.println("文件创建失败！");
					}
				}
				File logFile = new File(fileLog, "history.txt");
				PrintWriter pw=null;
				try {
					pw = new PrintWriter(new FileOutputStream(logFile, true),true);
					pw.println(log.toString());//输出用户的登录时间信息
					pw.flush();
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}finally {
					pw.close();
				}
				break;
			default:
				System.out.println("输入错误，请重新输入！");
				continue;
			}
			break;
		}
	}
}
